// 封装uni.request为类似axios的请求方法
import { getToken, removeToken } from '../utils/auth'

// 创建请求实例
const service = {
  request(config) {
    // 默认配置
    const baseConfig = {
      url: config.url,
      method: config.method || 'GET',
      data: config.data,
      header: config.headers || {},
      timeout: 50000
    }

    // 添加基础URL - 使用代理前缀
    const baseURL = 'http://localhost:9999'
    baseConfig.url = baseURL + adaptationUrl(baseConfig.url)

    // 如果请求头中没有skipToken标记，则添加token
    if (!baseConfig.header.skipToken) {
      const token = getToken()
      if (token) {
        baseConfig.header['Authorization'] = `Bearer ${token}`
      }
    }

    // 返回Promise
    return new Promise((resolve, reject) => {
      uni.request({
        ...baseConfig,
        success: (response) => {
          const res = response.data
          
          // 根据后端返回的状态码判断请求是否成功
          if (res.code === 1) {
            reject(res)
          } else {
            resolve(res)
          }
        },
        fail: (error) => {
          // 处理token过期等特殊错误
          if (error.statusCode === 424) {
            // 显示消息提示
            uni.showToast({
              title: '令牌状态已过期，请重新登录',
              icon: 'none'
            })
            // 清除token
            removeToken()
            // 跳转到登录页
            uni.navigateTo({
              url: '/pages/login/login'
            })
          }
          reject(error)
        }
      })
    })
  }
}

// 适配不同架构的URL
function adaptationUrl(url) {
  if (!url) return url
  // 这里可以根据需要实现URL适配逻辑
  return url
}

// 添加常用方法
['get', 'post', 'put', 'delete'].forEach(method => {
  service[method] = (url, data, headers) => {
    return service.request({
      url,
      method: method.toUpperCase(),
      data,
      headers
    })
  }
})

export default service